package dto

// PointsChangeReq 积分变动请求
type PointsChangeReq struct {
	UserId   int64  `json:"user_id" binding:"required"`
	Type     string `json:"type" binding:"required"` // 变更为string类型
	Points   int64  `json:"points"`                  // 可选，如果不传则使用规则配置
	Remark   string `json:"remark"`
	Operator int64  `json:"operator"`
}

// PointsRuleResp 积分规则响应
type PointsRuleResp struct {
	Type        string `json:"type"`
	Name        string `json:"name"`
	Points      int64  `json:"points"`
	DayLimit    int    `json:"day_limit"`
	Description string `json:"description"`
}

// UserPointsResp 用户积分响应
type UserPointsResp struct {
	Points      int64          `json:"points"`       // 当前积分
	TotalPoints int64          `json:"total_points"` // 累计积分
	DayActions  map[string]int `json:"day_actions"`  // 今日各项操作次数
}

// PointsLogResp 积分记录响应
type PointsLogResp struct {
	Id         int64  `json:"id"`
	Type       int    `json:"type"`        // 变动类型
	TypeText   string `json:"type_text"`   // 类型文本
	Points     int64  `json:"points"`      // 变动积分
	Balance    int64  `json:"balance"`     // 变动后余额
	Remark     string `json:"remark"`      // 备注
	CreateTime string `json:"create_time"` // 创建时间
}

// CreatePointsRuleReq 创建积分规则请求
type CreatePointsRuleReq struct {
	Type        string `json:"type" binding:"required"`
	Name        string `json:"name" binding:"required"`
	Points      int64  `json:"points" binding:"required"`
	DayLimit    int    `json:"day_limit"`
	Description string `json:"description"`
}

// UpdatePointsRuleReq 更新积分规则请求
type UpdatePointsRuleReq struct {
	Id          int64  `json:"id" binding:"required"`
	Name        string `json:"name"`
	Points      int64  `json:"points"`
	DayLimit    int    `json:"day_limit"`
	Status      int    `json:"status"`
	Description string `json:"description"`
}

// ListPointsRuleReq 查询积分规则请求
type ListPointsRuleReq struct {
	Type   string `form:"type"`
	Status int    `form:"status"`
	Page   int    `form:"page" binding:"required,min=1"`
	Size   int    `form:"size" binding:"required,min=1,max=50"`
}

// ListPointsRuleResp 积分规则列表响应
type ListPointsRuleResp struct {
	Total int64             `json:"total"`
	List  []*PointsRuleResp `json:"list"`
}
